﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //一、编写一个控制台应用程序，接受用户输入的两个整数和一个操作符，以实现对两个整数的加、减、乘、除运算，
    //并显示出计算结果。

    //1、创建Calculate基类，其中包含两个整型的protected成员，用以接收用户输入的两个整数。
    //定义一个DisplayResult()虚方法，计算并输出结果。
    //2、定义四个类继承自Calculate类，分别重写DisplayResult()方法，实现两个整数的加、减、乘、除运算，
    //并输出结果。
    //3、根据用户输入的操作符，实例化相应的类，完成运算并输出结果。
    //4、在主类中添加一个方法，形参为父类对象，根据传递实参的类型，调用方法，实现计算和显示结果。

    class Calculate
    {
        protected int numone { get; set; }
        protected int numtwo { get; set; }
        protected string charter { get; set; }
        public Calculate(int numone, int numtwo, string charter)
        {
            this.numone = numone;
            this.numtwo = numtwo;
            this.charter = charter;
        }
        public virtual void DisplayResult()
        {
            
        }
    }
    class Add : Calculate//加
    {
        
        public Add(int numone, int numtwo, string charter) :base(numone, numtwo, charter){ }
        public override void DisplayResult()
        {
            Console.WriteLine(numone + charter + numtwo + "=" + (numone + numtwo));
        }
    }
    class Minus : Calculate//减
    {
        public Minus(int numone, int numtwo, string charter) : base(numone, numtwo, charter) { }

        public override void DisplayResult()
        {
            Console.WriteLine(numone + charter + numtwo + "=" + (numone - numtwo));
        }
    }
    class Ride : Calculate//乘
    {
        public Ride(int numone, int numtwo, string charter) : base(numone, numtwo, charter) { }

        public override void DisplayResult()
        {

            Console.WriteLine(numone + charter + numtwo + "=" + (numone * numtwo));
        }
    }
    class Divide : Calculate//除
    {
        public Divide(int numone, int numtwo, string charter) : base(numone, numtwo, charter) { }
        public override void DisplayResult()
        {
            Console.WriteLine(numone + charter + numtwo + "=" + (numone / numtwo));
        }
    }
    class PublicCalculate
    {
        public void PublicCalculatetest(Calculate calculate)
        {

            calculate.DisplayResult();
        }
    }
    class Program
    {
        public void Js(int a, int b)
        {
            Console.WriteLine("请输入2位数：");
            a = int.Parse(Console.ReadLine());
            b = int.Parse(Console.ReadLine());
        }
        static void Main(string[] args)
        {
            Console.WriteLine("请选择你要运算的类型：1.+   2.-   3.x   4./");
            int key = Convert.ToInt32(Console.ReadLine());
            Calculate calculate;
            switch (key)
            {
                case 1:
                    Console.WriteLine("请输入第一个数：");
                    int Numone1 = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("请输入第二个数：");
                    int Numtwo1 = Convert.ToInt32(Console.ReadLine());
                    calculate = new Add(Numone1, Numtwo1, "+");
                    break;
                case 2:
                    Console.WriteLine("请输入第一个数：");
                    int Numone2 = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("请输入第二个数：");
                    int Numtwo2 = Convert.ToInt32(Console.ReadLine());
                    calculate = new Minus(Numone2, Numtwo2, "-");
                    break;
                case 3:
                    Console.WriteLine("请输入第一个数：");
                    int Numone3 = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("请输入第二个数：");
                    int Numtwo3 = Convert.ToInt32(Console.ReadLine());
                    calculate = new Ride(Numone3, Numtwo3, "*");
                    break;
                case 4:
                    Console.WriteLine("请输入第一个数：");
                    int Numone4 = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("请输入第二个数：");
                    int Numtwo4 = Convert.ToInt32(Console.ReadLine());
                    calculate = new Divide(Numone4, Numtwo4, "/");
                    break;
                default:
                    calculate = new Add(0, 0, "+");
                    Console.WriteLine("你确定你没选择错？");
                    break;
            }
            PublicCalculate publicCalculate = new PublicCalculate();
            publicCalculate.PublicCalculatetest(calculate);
            Console.ReadKey();
        }
    }
}